import axios from 'axios'
import store from '@/store'
import Qs from 'qs'
const request1 = axios.create({
  baseURL: 'http://127.0.0.1:3007',
  // 请求超时时间1分钟
  timeout: 6000,
  responseType: 'json',
  // 是否允许带cookie这些
  withCredentials: true
})
// 请求拦截器，设置token
request1.interceptors.request.use(
  config => {
    // 在这里做认证，可以从store里面获取token
    if (store.state.token) {
      config.headers.Authorization = store.getters.getToken
    }
    // 如果get  请求有缓存，可以加这段代码
    // if (config.method === 'get') {
    //   const now = `${Date.now()}`
    //   if (config.params) {
    //     config.params[now] = now
    //   } else {
    //     const hasParams = config.url.includes('?')
    //     config.url = config.url + (hasParams ? '&' : '?') + `${now}=${now}`
    //   }
    // }

    return config
  },
  error => {
    return Promise.reject(error)
  }
)
// 响应拦截器
// request1.interceptors.response.use(
//   (response) => {
//     if (response.status === 200) {
//       // 993登录过期
//       if (response.data.code !== '993') {
//         return Promise.resolve(response)
//       } else {
//         console.log('登录过期')
//         // store.commit('clearUserInfo')  // 使用vuex存储过用户信息，这里需要清空一下。
//         window.location.href = '/#/login'
//       }
//     } else {
//       return Promise.reject(response)
//     }
//   },
//   (error) => {
//     // alert("网络异常!") 404等问题可以在这里处理
//     return Promise.reject(error)
//   }
// )

// 2、封装请求方式
// upload 请求
// export function uploader(url, file) {
//   const params = new FormData()
//   params.append('file', file)
//   return processingNetwork(axios.post(url, params))
// }

export const request = (method, url, data) => {
  return processingNetwork(
    request1({
      url: url,
      method: method,
      data: method === 'post' ? Qs.stringify(data) : data,
      headers: {
        'Content-Type': 'application/json'
      }
    })
  )
}

export const formRequest = (method, url, data) => {
  return processingNetwork(
    request1({
      url: url,
      method: method,
      data: method === 'post' ? Qs.stringify(data) : data,
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    })
  )
}

// 网络处理,参数为 promise 对象
const processingNetwork = (promiseADO) => {
  return new Promise(function(resolve, reject) {
    promiseADO
      .then((response) => {
        if (response.data.code === 200) {
          resolve(response.data)
        } else {
          console.log(response.data.msg)
        }
      })
      .catch(() => {
        console.log('网络异常')
      })
  })
}
